import router from '@/router'
import NProgress from 'nprogress'
import store from '@/store'

/**
* 前置守卫
*
**/
const whiteList = ['/login', '/404']
router.beforeEach(async (to, from, next) => {
  NProgress.start()
  if (store.getters.token) {
    // 存在token时
    console.log('@@@ ===进入存在token时的执行逻辑。')
    if (to.path === '/login') { // 如果是访问登录页
      console.log('@@@ =进入存在token,且访问 登录页 时的执行逻辑。')
      next('/example') // 跳转到example页面
      NProgress.done()
    } else { // 如果是访问非登录页
      console.log('@@@ =进入存在token,且访问 非登录页 时的执行逻辑。')
      // 获取当前登录用户的信息(条件：有token + 访问的是非登录页 + 未获取过用户信息。注意：因刷新页面会导致用户信息清空，故也会触发重新获取用户资料)
      console.log('@@@ userId = ' + store.getters.userId)
      if (!store.getters.userId) { // 若未获取过用户信息
        // 获取用户资料
        await store.dispatch('user/getUserInfo')
      }
      next() // 放行
      NProgress.done()
    }
  } else {
    // 不存在token时
    console.log('@@@ %%%进入不存在token时的执行逻辑。')
    if (whiteList.indexOf(to.path) > -1) {
      console.log('@@@ %进入不存在token,且访问 白名单页面 时的执行逻辑。')
      next() //
    } else {
      console.log('@@@ %进入不存在token,且访问 非白名单页面 时的执行逻辑。')
      next('/login') // 中转到登陆页面
      NProgress.done()
    }
  }
})

/**
* 后置守卫
*
**/
router.afterEach(() => {
  console.log('@@@ 进入router.afterEach的执行逻辑。')
  NProgress.done()
})
